package com.dinzeer.legendreliclib.lib.util;

import net.minecraft.resources.ResourceKey;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.damagesource.DamageType;
import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.LivingEntity;

/**
 * 提供处理游戏实体伤害相关的实用工具方法。
 * 主要功能包括快速造成伤害和创建伤害源对象。
 * 
 * @author Dinzeer
 * @version 1.0
 */
public class FastMakeEntityUtil {
    
    /**
     * 快速对指定实体造成伤害，绕过实体的无敌时间限制。
     * 此方法会先将实体的无敌时间重置为0，然后施加指定类型和数值的伤害。
     *
     * @param entity 要受到伤害的目标实体
     * @param DamageSources 伤害来源实体（攻击者）
     * @param amount 伤害数值
     * @param damageType 伤害类型资源键，定义在{@link net.minecraft.core.registries.Registries#DAMAGE_TYPE}注册表中
     */
    public static void FastHurt(LivingEntity entity,LivingEntity DamageSources, float amount, ResourceKey<DamageType> damageType){
        entity.invulnerableTime=0;
        entity.hurt(DamageSourceToCreat(DamageSources,damageType), amount);
    }
    /**
     * 快速对实体施加buff·无限时长
     * @param entity 被加效果的实体
     * @param effect 指定的效果
     * @param level  等级
     */
    public static void FastEffectByInfinite(LivingEntity entity, MobEffect effect,int level){
        level=level-1;
        entity.addEffect(new MobEffectInstance(effect, Integer.MAX_VALUE-1, level));
    }

    /**
     * 快速对实体施加buff·时长按小时算
     * @param entity 被加效果的实体
     * @param effect 指定的效果
     * @param level  等级
     * @param hour   时间（按小时算）
     */
    public static void FastEffectByHour(LivingEntity entity, MobEffect effect,int level,int hour){
        level=level-1;
        entity.addEffect(new MobEffectInstance(effect, hour*60*20, level));
    }


    /**
     * 快速对实体施加buff·时长按分钟算
     * @param entity 被加效果的实体
     * @param effect 指定的效果
     * @param level  等级
     * @param minute   时间（按分钟算）
     */
    public static void FastEffectByMinute(LivingEntity entity, MobEffect effect,int level,int minute){
        level=level-1;
        entity.addEffect(new MobEffectInstance(effect, minute*60*20, level));
    }
    /**
     * 快速对实体施加buff，通过本方法能让代码可读性不至于特别差
     * @param entity 被加效果的实体
     * @param effect 指定的效果
     * @param level  等级
     * @param time   时间（无需按tick算，输入秒数即可）
     */
    public static void FastEffect(LivingEntity entity, MobEffect effect,int level,int time){
        level=level-1;
        entity.addEffect(new MobEffectInstance(effect, time*20, level));
    }
    /**
     * 快速对实体施加buff，不过是固定15秒的版本
     * @param entity 被加效果的实体
     * @param effect 指定的效果
     * @param level  等级
     */
    public static void FastEffect(LivingEntity entity, MobEffect effect,int level){
        level=level-1;
        entity.addEffect(new MobEffectInstance(effect, 300, level));
    }
    /**
     * 创建基于指定伤害类型和来源实体的伤害源对象。
     * 通过游戏注册表获取指定的伤害类型，并绑定到来源实体。
     *
     * @param player 伤害来源实体
     * @param damageType 伤害类型资源键
     * @return 配置完成的伤害源对象
     */
    public static DamageSource DamageSourceToCreat(LivingEntity player, ResourceKey<DamageType> damageType){
        return   new DamageSource(player.level().registryAccess()
                .registryOrThrow(net.minecraft.core.registries.Registries.DAMAGE_TYPE)
                .getHolderOrThrow(damageType), player);
    }

}
